Tableau 10.5新機能:新データエンジン「Hyper」〜パフォーマンスを検証してみた編 #tableau
はじめに
こんにちは。DI部のtamaです。
遅くなりましたが、今回もHyperに関するエントリを投下します!
今までのエントリではHyper自身の説明や、HyperがTableauでどう使われているのか、といった点について見てきましたが、今回はいよいよ実際にHyperを検証してみたいと思います。
前回までのHyperエントリ
- Tableau 10.5新機能:新データエンジン「Hyper」〜そもそもHyperって?編 #tableau | Developers.IO
- Tableau 10.5新機能:新データエンジン「Hyper」〜TableauでHyperはどう使われている?編 #tableau | Developers.IO
今回の検証の概要
検証項目
以下について、.tdeファイルと.hyperファイルそれぞれで実施し、パフォーマンスを比較します。
- Tableau Desktopによる抽出ファイルの作成
- Tableau Desktopによる抽出ファイルを使ったVizに対する操作(クエリのパフォーマンス)
検証の観点
tdeファイルのパフォーマンスと比べて、Hyperがどの程度のものかを見ます。
今回、tdeファイル自体のパフォーマンスには着目しません。(検証環境等の他要因の影響もあるため)
検証パターン
- パターン1
- ローカルのCSVファイルを抽出
- 300万レコード
- パターン2
- Amazon Redshiftに接続し、そこから抽出
- 1億レコード
ローカルのファイルから抽出するパターンと、別途DBへ接続し、そこから抽出するパターンの2つを試したいと思います。
Hyperはデータ量が多いほど効果を発揮する…という特徴がありますが、その辺りも見てみたいため、2種類のデータを用意しました。
検証環境
作業環境
- MacOS High Sierra 10.13.2
- Tableau 10.4.2
- tde作成用
- Tableau 10.5
- hyper作成用
- Amazon Redshift
- クラスタ:dc1.large
- ノード:2
- リージョン:バージニア(us-east-1)
使用データ
ステップ 1: テストデータセットを作成する - Amazon Redshift
AWSが提供しているサンプルデータを使用します。
(s3://awssampledbapnortheast1/ssbgz)
- パターン1用データ(ローカルCSV) サンプルデータのcustomerを使用します。
`tama$ wc customer0002_part_00.csv` ` 3000000 7294613 286529327 customer0002_part_00.csv`
- パターン2用データ サンプルデータのlineorderから1億件分使用します。
cmawsteamdb=# \d lineorder_tama Table "public.lineorder_tama" Column | Type | Collation | Nullable | Default --------------------+-----------------------+-----------+----------+--------- lo_orderkey | integer | | not null | lo_linenumber | integer | | not null | lo_custkey | integer | | not null | lo_partkey | integer | | not null | lo_suppkey | integer | | not null | lo_orderdate | integer | | not null | lo_orderpriority | character varying(15) | | not null | lo_shippriority | character varying(1) | | not null | lo_quantity | integer | | not null | lo_extendedprice | integer | | not null | lo_ordertotalprice | integer | | not null | lo_discount | integer | | not null | lo_revenue | integer | | not null | lo_supplycost | integer | | not null | lo_tax | integer | | not null | lo_commitdate | integer | | not null | lo_shipmode | character varying(10) | | not null | cmawsteamdb=# select count(*) from lineorder_tama; count ----------- 100000000 (1 row)
検証〜パターン1(ローカルCSVファイル:300万レコード)
抽出ファイルの作成
抽出にかかった時間は以下の通り。
ファイル種別 | 所要時間 |
---|---|
.tde | 84秒 |
.hyper | 34秒 |
明らかにhyperの方が早いです。tdeの半分以下の時間で作成できました。
Vizに対する操作
以下のようなVizを作成し、検索フィルタ(c_addresという項目に1文字入力して検索する)を使用した場合、処理にかかる時間を計測します。
処理にかかった時間は以下の通り
ファイル種別 | 所要時間 |
---|---|
.tde | 6.02秒 |
.hyper | 2.87秒 |
こちらも、hyperがtdeの半分以下の時間で処理完了。
検証〜パターン2(Amazon Redshift:1億レコード)
抽出ファイルの作成
抽出にかかった時間は以下の通り。
ファイル種別 | 所要時間 |
---|---|
.tde | 102分 |
.hyper | 95分 |
…あれ、そんなに差がない…?
所要時間だけ見ると、そのように思いますが、DBに対するデータ接続から抽出する場合、まずデータをTableau側にインポートする処理が走ります。これに関しては、DBやネットワーク環境の影響こそありますが、tdeやhyperは関係ありません。(抽出する前の話なので)
当検証のデータインポートにかかった時間は約94分でした。(ダイアログをずっと注視していないと正確な時間がわからないため、大体の測定且つエビデンスが無いことをご了承ください)
そこから考えると、tdeは1億件の抽出ファイル作成に10分弱かかっていますが、hyperは1分弱で作成できていることになります。
Hyperはデータ量が多いほど効果を発揮する…どうやら本当のようですね…
Vizに対する操作
以下のようなVizを作成し、検索フィルタ(lo_custkeyという項目に1文字入力して検索する)を使用した場合、処理にかかる時間を計測します。
処理にかかった時間は以下の通り
ファイル種別 | 所要時間 |
---|---|
.tde | 60.92秒 |
.hyper | 8.55秒 |
早い!Hyperめちゃくちゃ早いです。(実際、この検証以外にも、適当にVizをいじっていたのですが、明らかにHyperの方が全体的に早かったです)
Hyperはデータ量が多いほど効果を発揮する…どうやら(ry
おわりに(まとめ)
Hyperの方がパフォーマンスが良いということは予想通りでしたが、今回の検証で一番注目したいのは、抽出ファイル自体の作成ではないでしょうか。
Tableauを使用している人のよくある悩みの一つに「ビューのパフォーマンスが遅い」というものがあります。その改善策の一つに「データ接続を、ライブから抽出に変更する」という方策がありますが、そもそも抽出作成に時間がかかるためこの策がとれない…ということがよくあります。
10.5から登場したhyperは、この課題を解決するにあたり、十分な可能性を秘めていると思います。ぜひ検討してみてください。
10.5新機能hyperについて、エントリ3連発として、一旦ここで締めますが、今後もTableau Serverの抽出タスク等、適宜やってみた系記事を更新していきたいと思います!